home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 4
/
FM Towns Free Software Collection 4 - Disc 1.iso
/
pao
/
towns
/
cdplay
/
src
/
elevol.c
< prev
next >
Wrap
Text File
|
1991-10-18
|
4KB
|
147 lines
/* << High C V1.4 >> **********************************************************
**
** 電子ボリューム ルーチン
**
** 1991.03.19 : CREATE
** 1991.03.19 : FINISH
**
** < HISTORY >
** 1991.03.19 : CREATE
**
** < note > : TABS = 4
**
** All Rights Reserved, Copyright (C) Y.Hirata 1991.
**
** Programmed by Y.Hirata ( Nifty ID : NAB03321 )
**
******************************************************************************/
#include <snd.h>
#include "elevol.h"
/**************************** 電子ボリュームのミュート *****************************/
void ELEVOL_mute( void )
/*=============================================================================
** 電子ボリュームのすべてをミュートする.
**
** < INPUT > : なし
** < OUTPUT > : なし
** < RETURN > : なし
=============================================================================*/
{
SND_elevol_all_mute( ELEVOL_MUTE_ON ) ;
}
/**************************** 電子ボリュームの設定 *****************************/
int ELEVOL_set( int sw,int l_vol,int r_vol )
/*=============================================================================
** 電子ボリュームの設定
**
** < INPUT > : sw 電子ボリューム設定スイッチ
** : l_vol LEFT VOLUME
** : r_vol RIGHT VOLUME
** < OUTPUT > : なし
** < RETURN > : エラー値
**
** 電子ボリューム は 0 ~ 127 だが、0 の時には その音源は ミュート し、
** 1 ~ 128 の時に電子ボリューム設定をするようにする。
**
** この関数を CALL すると、オールミュートが解除されます.
=============================================================================*/
{
static int muteSw = 0xff ;
if ( sw < 0 || sw > 3 ) return( ELEVOL_ERROR ) ; /* エラー */
if ( l_vol == 0 ) { /* 指定された音源のチャンネルをミュートする */
switch ( sw ) {
case ELEVOL_LINE :
muteSw &= 0xf7 ;
break ;
case ELEVOL_CD :
muteSw &= 0xdf ;
break ;
case ELEVOL_MIC :
muteSw &= 0xbf ;
break ;
case ELEVOL_MODEM :
muteSw &= 0x7f ;
}
} else { /* 指定された音源のチャンネルのミュートを解除する */
switch ( sw ) {
case ELEVOL_LINE :
muteSw |= 0x08 ;
break ;
case ELEVOL_CD :
muteSw |= 0x20 ;
break ;
case ELEVOL_MIC :
muteSw |= 0x40 ;
break ;
case ELEVOL_MODEM :
muteSw |= 0x80 ;
}
l_vol -- ;
}
if ( r_vol == 0 ) {
switch ( sw ) {
case ELEVOL_LINE :
muteSw &= 0xfb ;
break ;
case ELEVOL_CD :
muteSw &= 0xef ;
break ;
case ELEVOL_MIC :
muteSw &= 0xbf ;
break ;
case ELEVOL_MODEM :
muteSw &= 0x7f ;
}
} else {
switch ( sw ) {
case ELEVOL_LINE :
muteSw |= 0x04 ;
break ;
case ELEVOL_CD :
muteSw |= 0x10 ;
break ;
case ELEVOL_MIC :
muteSw |= 0x40 ;
break ;
case ELEVOL_MODEM :
muteSw |= 0x80 ;
}
r_vol -- ;
}
if ( l_vol > ELEVOL_MAX ) l_vol = ELEVOL_MAX ;
if ( l_vol < ELEVOL_MIN ) l_vol = ELEVOL_MIN ;
if ( r_vol > ELEVOL_MAX ) r_vol = ELEVOL_MAX ;
if ( r_vol < ELEVOL_MIN ) r_vol = ELEVOL_MIN ;
SND_elevol_all_mute( ELEVOL_MUTE_OFF ) ;
SND_elevol_set( sw,l_vol,r_vol ) ;
SND_elevol_mute( muteSw ) ;
return ( ELEVOL_NOERROR ) ;
}
/**************************** 電子ボリュームの設定 *****************************/
int ELEVOL_get( int sw,int *l_vol,int *r_vol )
/*=============================================================================
** 電子ボリューム値の読み取り
**
** < INPUT > : sw 電子ボリューム設定スイッチ
** : l_vol LEFT VOLUME
** : r_vol RIGHT VOLUME
** < OUTPUT > : なし
** < RETURN > : エラー値
**
** 電子ボリューム は 0 ~ 127 だが、読み取り値は 偶数 となる.
=============================================================================*/
{
return( SND_elevol_read( sw,l_vol,r_vol ) ) ;
}